package org.example.code.test2024.twelve;

import java.util.*;

/**
 * @Title: test1227
 * @Author yxy
 * @Package org.example.code.twelve
 * @Date 2024/12/27 11:31
 * @description:
 */
public class test1227 {

//    public List<List<Integer>> subsetsWithDup(int[] nums) {
//        List<List<Integer>> res = new ArrayList<List<Integer>>();
//        List<Integer> elements = new ArrayList<>();
//        for (int num : nums) {
//            elements.add(num);
//        }
//        int total = 1<<elements.size();
//        for(int i=0;i<total;i++){
//            List<Integer> item = new ArrayList<>();
//            for(int j=0;j<elements.size();j++){
//                if((i&(1<<j)) != 0){
//                    item.add(elements.get(j));
//                }
//            }
//            res.add(item);
//        }
//        return res;
//    }

    public List<List<Integer>> subsetsWithDup(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        Arrays.sort(nums);
        fun(nums,0,new ArrayList<Integer>(),res);
        return res;
    }

    private void fun(int[] nums, int start, ArrayList<Integer> cur, List<List<Integer>> res) {
        res.add(new ArrayList<Integer>(cur));
        for (int i = start; i < nums.length; i++) {
            if(i>start&&nums[i]==nums[i-1]){
                continue;
            }
            cur.add(nums[i]);
            fun(nums,i+1,cur,res);
            cur.remove(cur.size()-1);
        }
    }

    public static void main(String[] args) {
        test1227 test = new test1227();
        System.out.println(test.subsetsWithDup(new int[]{1,2,1}));
    }


}
